#pragma once
#include <vector>
#include "tools.hh"

namespace icehpc
{
    struct solver
    {
        solver(int n, int size, int rank)
            :
                start(tools::start_id(n, size, rank)),
                  end(tools::  end_id(n, size, rank)),
                  tot(tools::   count(n, size)),
            max_error(0)
        {
            au.resize(tot * size);
            u .resize(tot);
            b .resize(tot);
        }

        // 每个进程维护点的起始 id
        int start;
        // 每个进程维护点的结束 id
        int end;
        // 每个进程维护点的个数
        int tot;

        // 每个进程局部解的最大误差
        double max_error;

        // 每个进程的全局解
        std::vector<double> au;
        // 每个进程的局部解
        std::vector<double> u;
        // 常数项
        std::vector<double> b;
    };
}

